package ar.com.gals.model;

import java.util.List;
import java.util.ArrayList;

import ar.com.gals.domain.Indice;
import ar.com.gals.domain.Marca;
import ar.com.gals.domain.Rubro;
import ar.com.gals.domain.Usuario;
import ar.com.gals.error.GalsException;
import ar.com.gals.service.IndiceService;
import ar.com.gals.service.MarcaService;
import ar.com.gals.service.RubroService;


public class MargenModel {

	private String tipoActualizacion;
	
	private Float margen;
	
	private String errorMargen;
	
	private List<IndiceModel> indices = new ArrayList<IndiceModel>();
	
	
	public MargenModel() { }
	
	public MargenModel(Usuario usuario) throws GalsException {
		
		for(Indice indice : new IndiceService().getAll(usuario)) {
			this.addIndice(new IndiceModel(indice));
		}
	}

	
	public String getTipoActualizacion() {
		return tipoActualizacion;
	}
	public void setTipoActualizacion(String tipoActualizacion) {
		this.tipoActualizacion = tipoActualizacion;
	}
	public Float getMargen() {
		return margen;
	}
	public void setMargen(Float margen) {
		this.margen = margen;
	}
	public String getErrorMargen() {
		return errorMargen;
	}
	public void setErrorMargen(String errorMargen) {
		this.errorMargen = errorMargen;
	}
	public List<IndiceModel> getIndices() {
		return indices;
	}
	public void setIndices(List<IndiceModel> indices) {
		this.indices = indices;
	}
	public void addIndice(IndiceModel indice) {
		this.indices.add(indice);
	}

	
	public boolean hasErrors() throws GalsException {

		boolean hasError = false;
		
		if(this.tipoActualizacion == null)
			throw new GalsException("Seleccione una opci&oacute;n, por favor.");
		
		if(this.tipoActualizacion.equals("T")) {
			if(this.margen == null) {
				this.errorMargen = "(*) El campo valor es requerido";
				hasError = true;
			}
		}
		else if(this.tipoActualizacion.equals("P"))	{
			for(IndiceModel model : this.indices)
				if(model.bindError())
					hasError = true;
		}
		
		return hasError;
	}
	
	
	public void modificarMargen(Usuario usuario) throws GalsException {
		
		IndiceService service = new IndiceService();

		List<Marca> marcas = new MarcaService().getAll();
		List<Rubro> rubros = new RubroService().getAll();
				
		for(IndiceModel model : this.indices) {
			
			if(model.getId() == 0) {
				
				Indice indice = new Indice();
				indice.setUsuario(usuario);
				
				for(Marca marca : marcas)
					if(marca.getId() == model.getMarca()) {
						indice.setMarca(marca);
						break;
					}
				for(Rubro rubro : rubros)
					if(rubro.getId() == model.getRubro()) {
						indice.setRubro(rubro);
						break;
					}
				if(this.tipoActualizacion.equals("T"))
					indice.setMargen(this.margen);
				else
					indice.setMargen(model.getMargen());
				indice.setDescuento(new Float(0));
				
				service.create(indice);
			}
			else {
				Indice indice = service.getById(model.getId());
				if(this.tipoActualizacion.equals("T"))
					indice.setMargen(this.margen);
				else
					indice.setMargen(model.getMargen());
				
				service.update(indice);
			}
		}
	}
}
